﻿namespace 工厂模式
{
    class Program
    {
        static void Main(string[] args)
        {

            //面向对象的编程，并不是类越多越好，类的划分是为了封装，但分类的基础是抽象，具有相同属性和功能的对象的抽象集合才是类
            //工厂类
            ShapeFactory shapeFactory = new ShapeFactory();

            //接口实现
            IShape shape = shapeFactory.getShape(FyType.Rectangle);
            shape.draw();

            shape=shapeFactory.getShape(FyType.Square);
            shape.draw();

            IShape shape1 = shapeFactory.getShape(FyType.Square);
            shape1.draw();

            IShape shape2 = shapeFactory.getShape(FyType.Circle);
            shape2.draw();


            // 抽象实现
            Shape shape3 = ShapeFactory.GetShape(FyType.Rectangle);
            shape3.draw(100d);
            Shape shape4 = ShapeFactory.GetShape(FyType.Square);
            shape4.draw(100d);
            Shape shape5 = ShapeFactory.GetShape(FyType.Circle);
            shape5.draw(900d);


            /**
             * 
             * 工厂模式：
             * 从前有个工厂花高价从国外进口了一条流水线（产线就叫巴拉），起初的时候这个流水线只做轮胎，所以也一直相安无事，
             * 突然有一天大boss看到橡胶鞋子的市场也很大，所以就像用这条产线生产橡胶鞋子，但是这条产线是做轮胎的呀，
             * 所以只能让 攻城狮小B 对产线进行了一次换血改造，历经九九八十一难之后终于改造完成了，过了两个月大boss 看了世乒赛了解到乒乓球胶皮，
             * 经过一番市场调研之后，大boss 有决定将原本生产橡胶鞋子的产线改造成生产胶皮的产线，
             * 这时候 小B不乐意了，俺小B千辛万苦给你改造的产线才用两个月就不用了？在一顿牢骚之后
             * 小B 就又双叒叕开始了他的改造之旅...
             * 这一天，小B就想了，有没有什么办法能让产线适应大boss 的各种奇葩需求呢？小B冥思苦想了很久很久直到小B 掉了三斤头发
             * 后看到邻居小C家的孩子遗留在院子里的积木，他想了，能不能把大boss 的各种需求变成一个个单独整体呢？
             * 他需要什么产线我就像搭积木一样把他组装完成就行了。
             * 大boss 提的各种需求的本质上都是在这条产线 Ishape 上完成的所以我就在 ishape 的基础上增加生产 轮胎（Rectangle tyre），橡胶鞋子（Square sope）
             * ，乒乓球胶皮（Circle pp）的机器就行了呀
             * 说干就干，小B 一顿操作之下，一条能生产 轮胎，橡胶鞋子，乒乓球胶皮的产线完成了，但是美中不足的是这条产线只能在某一段时间内生产某一中产品
             * 小B 就想了有什么办法能让这条产线同时生产三种或者更多的产品呢？
             * 找个人小D（ShapeFactory）看着就行了呗，什么样的材料放到什么样的机器上，以后就算大boss 让我用这条产线给他造航母也不怕了，
             * 只要再制造一个生产航母的机器，再告诉小D 你只要把航母要的材料放进机器就可以了。
             * 就这样小B用自己的智慧优雅地解决了daboss 的各种需求，由于这种设计模式是小B 在工厂里打工时发现的
             * 所以小B 亲切的将这种模式 叫做-----工厂模式.....
             * 欲知后事如何且听下回分解。
             * 
             */
        }
    }
}
